哈囉,大家好,今天來的有點晚,
今天想跟大家分享陣列的排序與搜尋,雖然這些方法已經沒什麼高手在用了,
但是今天小菜鳥還是翻到了這些陣列的介紹。
首先就讓小菜鳥大致介紹幾種排序法:
**1.**氣泡排序法
**2.**循序搜尋法
**3.**二分搜尋法
氣泡排序法
其中就屬氣泡排序法是算比較簡單易懂的方法,
氣泡排序法就像把每個陣列元素當作空盒子,將兩個相鄰的數字、資料做比較,
在依照排序的條件交換位置。
循序搜尋法
通常我們排序資料就是要把資料排出大小順序之外,另外就是要為了更有效率的搜尋資料,
搜尋的方法有很多種方法,循序搜尋法是比較簡單的方法,
因為循序搜尋的做法是由第一筆資料往後搜尋,一直找到資料為止,
或者把資料蒐尋完...算是比較堅持的方法拉XD。
二分搜尋法
二分這個方法就稍微比較特別一點點,因為必須要先將資料、陣列進行排序,
二分搜尋法的效率就是會比循序搜尋法好,
如果有N筆資料進行二分搜尋法,平均會做Log2N+1次。
以上文謅謅的說明講完了,接下來就來看看小菜鳥今天演練的程式碼吧!
今天演練的程式碼是使用泡沫排序法來進行從小到大的排序,
在使用二分搜尋法來搜尋輸入的數字的位置。
public class JavaApplication8 {
public static void main(String[] args) {
int[] aNum = { 23, 100, 58, 11, 67, 12, 44, 101, 75 };
System.out.print(" 排序前:");
for (int i = 0; i < aNum.length; i++)
System.out.print(" " + aNum[i]);
System.out.println();
int n = aNum.length;
int t;
for (int i = n - 2; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
if (aNum[j] > aNum[j + 1]) {
t = aNum[j];
aNum[j] = aNum[j + 1];
aNum[j + 1] = t;
}
}
}
System.out.print(" 排序後:");
for (int i = 0; i < aNum.length; i++)
System.out.print(" " + aNum[i]);
System.out.println();
Scanner scn = new Scanner(System.in);
System.out.print(" 請輸入要搜尋的數字: ");
int sNum = scn.nextInt();
int num = -1, low = 0, high = aNum.length - 1, midNum = 0;
do {
midNum = (low + high) / 2;
if (aNum[midNum] == sNum) {
num = midNum;
break;
}
if (aNum[midNum] > sNum)
high = midNum - 1;
else
low = midNum + 1;
} while (low <= high);
if (num == -1)
System.out.println(" 沒有 " + sNum + " 這個數字! ");
else
System.out.println(" 排序後找到 " + sNum + " 是第 " + (num + 1)+ " 個數字!");
}
}
小菜鳥還不清楚這些方法可以應用在哪裡,等我菜味比較沒有的時候,
在來跟大家分享可以在應用哪些地方,謝謝大家,我們明天見。